part of '../shelf.dart';

/// 调用此middleware之前需要先试用redeemToken找到token中的subject
/// 此操作需要连接数据库，查找用户是否属于管理员
Middleware checkAdmin = createMiddleware(
  requestHandler: (Request request) async {
    // 将subject解析为int
    int id = int.parse(request.subject);
    // 使用id找到用户信息，如果没找到，则直接throw
    final User? user = await userTable.find(id);
    if (user == null) throw BugDev("根据token主体${request.subject}无法找到用户");
    // 如果用户不是管理员，则返回403错误
    if (user.isAdmin) {
      // 如果用户是管理员，则继续处理
      return null;
    } else {
      // 否则报403错误
      return response(403, "此操作需要管理员身份，请求被拒绝");
    }
  },
);
